package com.yuncheng.spcyApi.controller;

import java.util.*;
import java.util.stream.Collectors;
import javax.annotation.Resource;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import com.yuncheng.vo.CurrentUserVo;
import com.yuncheng.vo.HttpResult;
import org.apache.commons.collections.CollectionUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuncheng.spcyApi.alog.annotation.Log;
import com.yuncheng.annotation.AutoLog;
import com.yuncheng.spcyApi.constant.common.LogConstant;
import com.yuncheng.spcyApi.constant.other.PxSjConstant;
import com.yuncheng.spcyApi.constant.common.SpcyConstant;
import com.yuncheng.spcyApi.entity.*;
import com.yuncheng.exception.BusinessException;
import com.yuncheng.spcyApi.service.*;
import com.yuncheng.common.base.controller.BaseController;

import com.yuncheng.spcyApi.utils.GetCurrentUserUtils;
import com.yuncheng.spcyApi.utils.GetUuIdUtils;
import com.yuncheng.spcyApi.vo.common.StartEndTimeVo;
import com.yuncheng.spcyApi.vo.wj.WjtjVo;
import com.yuncheng.spcyApi.vo.wj.WjtmdbtVo;
import com.yuncheng.spcyApi.vo.wj.WjtxtmVo;
import com.yuncheng.spcyApi.vo.wj.WjxzVo;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.*;

import io.swagger.annotations.Api;
import utils.DateConversionUtils;
import utils.LogUtils;
import utils.ObjectToMapUtils;

/**
 * @Description: 审评查验-问卷填写基本信息
 * @Author: yuncheng
 * @Date: 2023-05-05
 * @Version: V1.0
 */
@Api(tags = "审评查验-问卷填写基本信息接口")
@RestController
@RequestMapping("/api/spzx-spcy/spcyWjWjtxjbxx")
public class SpcyWjWjtxjbxxController extends BaseController<SpcyWjWjtxjbxx, ISpcyWjWjtxjbxxService> {

    private static final Logger log = LoggerFactory.getLogger(SpcyWjWjtxjbxxController.class);

    @Resource
    private ISpcyWjWjtxjbxxService spcyWjWjtxjbxxService;

    @Resource
    private ISpcyWjWjtxtmService spcyWjWjtxtmService;

    @Resource
    private ISpcyWjWjtxtmxxService spcyWjWjtxtmxxService;

    @Resource
    private ISpcyWjWjjbxxService spcyWjWjjbxxService;

    @Resource
    private ISpcyWjWjtmService spcyWjWjtmService;

    @Resource
    private ISpcyWjWjtmxxService spcyWjWjtmxxService;

    @Resource
    private ISpcyWjDbtService spcyWjDbtService;

    @Resource
    private ISpcyLogService spcyLogService;


    /**
     * 分页列表查询
     *
     * @param spcyPxDjjbxx
     * @param pageNo
     * @param pageSize
     * @return
     */
    @AutoLog(value = "填写的问卷基本信息-分页列表查询")
    @ApiOperation(value = "填写的问卷基本信息-分页列表查询")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "flag",value = "是（已提交的问卷）/ 否")
    })
    @GetMapping(value = "/txwjjbxxPageList")
    public HttpResult<?> txwjjbxxPageList(SpcyWjWjtxjbxx spcyPxDjjbxx,
                                        StartEndTimeVo startEndTimeVo,
                                        @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
                                        @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
        Page<SpcyWjWjtxjbxx> page = new Page<>(pageNo, pageSize);
        LambdaQueryWrapper<SpcyWjWjtxjbxx> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.like(StringUtils.isNotEmpty(spcyPxDjjbxx.getFbz()),SpcyWjWjtxjbxx::getFbz,spcyPxDjjbxx.getFbz());
        queryWrapper.like(StringUtils.isNotEmpty(spcyPxDjjbxx.getFwjbt()),SpcyWjWjtxjbxx::getFwjbt,spcyPxDjjbxx.getFwjbt());
        queryWrapper.like(StringUtils.isNotEmpty(spcyPxDjjbxx.getFwjjbxxid()),SpcyWjWjtxjbxx::getFwjjbxxid,spcyPxDjjbxx.getFwjjbxxid());
        queryWrapper.like(StringUtils.isNotEmpty(spcyPxDjjbxx.getFwjlx()),SpcyWjWjtxjbxx::getFwjlx,spcyPxDjjbxx.getFwjlx());
        queryWrapper.like(StringUtils.isNotEmpty(spcyPxDjjbxx.getFwjms()),SpcyWjWjtxjbxx::getFwjms,spcyPxDjjbxx.getFwjms());
        // 2023-6-26 新增
        CurrentUserVo currentUser = GetCurrentUserUtils.getCurrentUser();
        if (currentUser != null) {
            if (!SpcyConstant.Org_Code_Admin.equals(currentUser.getDeptCode())){
                queryWrapper.eq(SpcyWjWjtxjbxx::getSysOrgCode, currentUser.getDeptCode());
            }
        }

        if (startEndTimeVo.getStartTime() != null && startEndTimeVo.getEndTime() != null){
            queryWrapper.between(SpcyWjWjtxjbxx::getFtjrq,startEndTimeVo.getStartTime(),startEndTimeVo.getEndTime());
        }
        if (StringUtils.isNotBlank(startEndTimeVo.getFlag())) {
            if (startEndTimeVo.getFlag().equals("是")) {
                queryWrapper.isNotNull(SpcyWjWjtxjbxx::getFtjrq);
            } else {
                queryWrapper.isNull(SpcyWjWjtxjbxx::getFtjrq);
            }
        }
//        queryWrapper.orderByDesc(SpcyWjWjtxjbxx::getFtjrq);
//        queryWrapper.orderByDesc(SpcyWjWjtxjbxx::getCreateTime);
        queryWrapper.orderByDesc(SpcyWjWjtxjbxx::getFtxrq);
        IPage<SpcyWjWjtxjbxx> pageList = spcyWjWjtxjbxxService.page(page, queryWrapper);
        return HttpResult.ok(pageList);
    }

    @Log(title = "初始化-填写的问卷基本信息")
    @ApiOperation(value = "初始化-填写的问卷基本信息")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(value = "id",name = "问卷id",required = true),
    })
    @GetMapping(value = "/initWjjbxx")
    public HttpResult initWjjbxx(@RequestParam(value = "id",defaultValue = "")String id){
        if (StringUtils.isEmpty(id)){
            return HttpResult.error("问卷id不能为空");
        }

        Map<String, Object> wjtxjbxxVo = initwjjbxx(id, GetUuIdUtils.ReplaceUuId());

        return HttpResult.ok(wjtxjbxxVo);
    }

    public HttpResult<?> initWjjbxxOld(String id) {
        if (StringUtils.isEmpty(id)){
            return HttpResult.error("问卷id不能为空");
        }
        String ysjId = id; // 原问卷id

        // 获取原来的试卷 复制一份
        SpcyWjWjjbxx ySjjbxx = spcyWjWjjbxxService.getById(ysjId);
        if (ySjjbxx == null){
            return HttpResult.error("问卷不存在，青刷新重试");
        }
        Date nowDate = new Date(); // 当前
        if (ySjjbxx.getFyxq() != null){
            boolean flag = ySjjbxx.getFyxq().before(nowDate);
            if (flag){
                return HttpResult.error("此问卷已失效，已于"+ DateConversionUtils.DateToString(ySjjbxx.getFyxq()) +"过期。");
            }
        }else {
            return HttpResult.error("此问卷已失效。");
        }
        String djId = GetUuIdUtils.ReplaceUuId(); // 新问卷id

        SpcyWjWjtxjbxx spcyPxDjjbxx = new SpcyWjWjtxjbxx();
        spcyPxDjjbxx.setId(djId);
        spcyPxDjjbxx.setFtxrq(new Date());
        spcyPxDjjbxx.setFwjbt(ySjjbxx.getFwjbt());
        spcyPxDjjbxx.setFwjlx(ySjjbxx.getFwjlx());
        spcyPxDjjbxx.setFwjms(ySjjbxx.getFwjms());
        spcyPxDjjbxx.setFwjjbxxid(ysjId);
        spcyPxDjjbxx.setFbz(ySjjbxx.getFbz());

        spcyPxDjjbxx.setSysOrgCode(ySjjbxx.getSysOrgCode()); // 2023-6-26 新增

        spcyWjWjtxjbxxService.save(spcyPxDjjbxx); // 新增填写的问卷
        spcyPxDjjbxx.setSysOrgCode(ySjjbxx.getSysOrgCode());
        spcyWjWjtxjbxxService.updateById(spcyPxDjjbxx);

        String operContent = "新增填写的问卷信息";
        // 将map里面的属性和值转String
        Map<String, Object> beanMap = ObjectToMapUtils.objectToMap(spcyPxDjjbxx);
        operContent += LogUtils.MapToStringMethod(beanMap);
        spcyLogService.addLogs(LogConstant.LOGS_WJ_WJTXJBXX,operContent,spcyPxDjjbxx.getId(), LogConstant.LOGS_WJ_WJTXJBXX, SpcyConstant.LOGS_SYS_TYPE_XZ);

        // 获取原来的问卷题目
        List<SpcyWjWjtm> ySjtmList = spcyWjWjtmService.list(new LambdaQueryWrapper<SpcyWjWjtm>()
                .eq(SpcyWjWjtm::getFwjjbxxid, ysjId)
                .orderByAsc(SpcyWjWjtm::getFxh));

        SpcyWjWjtxtm djtm = null;
        // 原试卷题目不为空
        for (SpcyWjWjtm sjtm : ySjtmList){
            djtm = new SpcyWjWjtxtm(); // 问卷题目
            // 复制原来问卷题目
            String djtmId = GetUuIdUtils.ReplaceUuId(); // 问卷题目id
            BeanUtil.copyProperties(sjtm,djtm);
            djtm.setId(djtmId);
            djtm.setFwjtxjbxxid(djId);
            spcyWjWjtxtmService.save(djtm); // 保存答卷题目

            if (StringUtils.isNotBlank(sjtm.getFsftxxdyj()) && sjtm.getFsftxxdyj().equals("是")){
                SpcyWjWjtxtmxx newTmxx = new SpcyWjWjtxtmxx();
                newTmxx.setId(GetUuIdUtils.ReplaceUuId());
                newTmxx.setFwjtxtmid(djtmId);
                newTmxx.setFxh(1);
                spcyWjWjtxtmxxService.save(newTmxx);
            }

            String ysjtmId = sjtm.getId(); // 原试卷题目id
            // 复制原试卷题目选项
            List<SpcyWjWjtmxx> ySjtmxxList = spcyWjWjtmxxService.list(new LambdaQueryWrapper<SpcyWjWjtmxx>()
                    .eq(SpcyWjWjtmxx::getFwjtmid, ysjtmId)
                    .orderByAsc(SpcyWjWjtmxx::getFxh));

            // 存在原试卷题目选项、新增答卷题目选项
            SpcyWjWjtxtmxx spcyPxDjda = null;
            for (SpcyWjWjtmxx sjtmxx : ySjtmxxList){
                spcyPxDjda = new SpcyWjWjtxtmxx();
                String djdaId = GetUuIdUtils.ReplaceUuId(); // 答卷答案id
                BeanUtil.copyProperties(sjtmxx,spcyPxDjda);
                spcyPxDjda.setId(djdaId);
                spcyPxDjda.setFwjtxtmid(djtmId); // 问卷题目id
                spcyPxDjda.setFxh(sjtmxx.getFxh());
                spcyWjWjtxtmxxService.save(spcyPxDjda); // 保存答卷题目选项
            }

        }

        Map<String,Object> wjtxjbxxVo = queryWjxqxxById(djId); // 获取问卷详情
        return HttpResult.ok(wjtxjbxxVo);
    }

    private Map<String, Object> initwjjbxx(String ysjId, String djId){

        // 获取原来的试卷 复制一份
        SpcyWjWjjbxx ySjjbxx = spcyWjWjjbxxService.getById(ysjId);
        if (ySjjbxx == null){
            throw new BusinessException("问卷不存在，青刷新重试");
        }
        Date nowDate = new Date(); // 当前
        if (ySjjbxx.getFyxq() != null){
            boolean flag = ySjjbxx.getFyxq().before(nowDate);
            if (flag){
                throw new BusinessException("此问卷已失效，已于"+ DateConversionUtils.DateToString(ySjjbxx.getFyxq()) +"过期。");
            }
        }else {
            throw new BusinessException("此问卷已失效。");
        }

        if (StringUtils.isBlank(djId)) {
            djId = GetUuIdUtils.NotReplaceUuId(); // 新问卷id
        }

        SpcyWjWjtxjbxx spcyPxDjjbxx = new SpcyWjWjtxjbxx();
        spcyPxDjjbxx.setId(djId);
        spcyPxDjjbxx.setFtxrq(new Date());
        spcyPxDjjbxx.setFwjbt(ySjjbxx.getFwjbt());
        spcyPxDjjbxx.setFwjlx(ySjjbxx.getFwjlx());
        spcyPxDjjbxx.setFwjms(ySjjbxx.getFwjms());
        spcyPxDjjbxx.setFwjjbxxid(ysjId);
        spcyPxDjjbxx.setFbz(ySjjbxx.getFbz());

        spcyPxDjjbxx.setSysOrgCode(ySjjbxx.getSysOrgCode()); // 2023-6-26 新增

        spcyWjWjtxjbxxService.save(spcyPxDjjbxx); // 新增填写的问卷
        spcyPxDjjbxx.setSysOrgCode(ySjjbxx.getSysOrgCode());
        spcyWjWjtxjbxxService.updateById(spcyPxDjjbxx);

        String operContent = "新增填写的问卷信息";
        // 将map里面的属性和值转String
        Map<String, Object> beanMap = ObjectToMapUtils.objectToMap(spcyPxDjjbxx);
        operContent += LogUtils.MapToStringMethod(beanMap);
        spcyLogService.addLogs(LogConstant.LOGS_WJ_WJTXJBXX,operContent,spcyPxDjjbxx.getId(), LogConstant.LOGS_WJ_WJTXJBXX, SpcyConstant.LOGS_SYS_TYPE_XZ);

        // 获取原来的问卷题目
        List<SpcyWjWjtm> ySjtmList = spcyWjWjtmService.list(new LambdaQueryWrapper<SpcyWjWjtm>()
                .eq(SpcyWjWjtm::getFwjjbxxid, ysjId)
                .orderByAsc(SpcyWjWjtm::getFxh));

        SpcyWjWjtxtm djtm = null;
        // 原试卷题目不为空
        for (SpcyWjWjtm sjtm : ySjtmList){
            djtm = new SpcyWjWjtxtm(); // 问卷题目
            // 复制原来问卷题目
            String djtmId = GetUuIdUtils.ReplaceUuId(); // 问卷题目id
            BeanUtil.copyProperties(sjtm,djtm);
            djtm.setId(djtmId);
            djtm.setFwjtxjbxxid(djId);
            spcyWjWjtxtmService.save(djtm); // 保存答卷题目

            if (StringUtils.isNotBlank(sjtm.getFsftxxdyj()) && sjtm.getFsftxxdyj().equals("是")){
                SpcyWjWjtxtmxx newTmxx = new SpcyWjWjtxtmxx();
                newTmxx.setId(GetUuIdUtils.ReplaceUuId());
                newTmxx.setFwjtxtmid(djtmId);
                newTmxx.setFxh(1);
                spcyWjWjtxtmxxService.save(newTmxx);
            }

            String ysjtmId = sjtm.getId(); // 原试卷题目id
            // 复制原试卷题目选项
            List<SpcyWjWjtmxx> ySjtmxxList = spcyWjWjtmxxService.list(new LambdaQueryWrapper<SpcyWjWjtmxx>()
                    .eq(SpcyWjWjtmxx::getFwjtmid, ysjtmId)
                    .orderByAsc(SpcyWjWjtmxx::getFxh));

            // 存在原试卷题目选项、新增答卷题目选项
            SpcyWjWjtxtmxx spcyPxDjda = null;
            for (SpcyWjWjtmxx sjtmxx : ySjtmxxList){
                spcyPxDjda = new SpcyWjWjtxtmxx();
                String djdaId = GetUuIdUtils.ReplaceUuId(); // 答卷答案id
                BeanUtil.copyProperties(sjtmxx,spcyPxDjda);
                spcyPxDjda.setId(djdaId);
                spcyPxDjda.setFwjtxtmid(djtmId); // 问卷题目id
                spcyPxDjda.setFxh(sjtmxx.getFxh());
                spcyWjWjtxtmxxService.save(spcyPxDjda); // 保存答卷题目选项
            }

        }

        return queryWjxqxxById(djId); // 获取问卷详情
    }

    @Log(title = "初始化-填写人的问卷基本信息")
    @ApiOperation(value = "初始化-填写人的问卷基本信息")
    @PostMapping(value = "initPersonWjjbxx")
    public HttpResult<?> initPersonWjjbxx(@RequestBody SpcyWjWjtxjbxx wjtxjbxx){
        if (StringUtils.isEmpty(wjtxjbxx.getId())){
            return HttpResult.error("问卷id不能为空");
        }
        if (StringUtils.isBlank(wjtxjbxx.getFsfdwmc())){
            return HttpResult.error("受访单位名称不能为空");
        }
        /*if (StringUtils.isBlank(wjtxjbxx.getFsfdwdz())){
            return HttpResult.error("受访单位地址不能为空");
        }*/
        if (StringUtils.isBlank(wjtxjbxx.getFlxr())){
            return HttpResult.error("联系人不能为空");
        }
        if (StringUtils.isBlank(wjtxjbxx.getFlxdh())){
            return HttpResult.error("联系单位不能为空");
        }

        String ysjId = wjtxjbxx.getId(); // 原问卷id

        // 获取原来的试卷 复制一份
        SpcyWjWjjbxx ySjjbxx = spcyWjWjjbxxService.getById(ysjId);
        if (ySjjbxx == null){
            return HttpResult.error("问卷不存在，青刷新重试");
        }
        Date nowDate = new Date(); // 当前
        if (ySjjbxx.getFyxq() != null){
            boolean flag = ySjjbxx.getFyxq().before(nowDate);
            if (flag){
                return HttpResult.error("此问卷已失效，已于"+ DateConversionUtils.DateToString(ySjjbxx.getFyxq()) +"过期。");
            }
        }else {
            return HttpResult.error("此问卷已失效。");
        }
        String djId = GetUuIdUtils.ReplaceUuId(); // 新问卷id

        SpcyWjWjtxjbxx spcyPxDjjbxx = new SpcyWjWjtxjbxx();
        spcyPxDjjbxx.setId(djId);
        spcyPxDjjbxx.setFtxrq(new Date());
        spcyPxDjjbxx.setFwjbt(ySjjbxx.getFwjbt());
        spcyPxDjjbxx.setFwjlx(ySjjbxx.getFwjlx());
        spcyPxDjjbxx.setFwjms(ySjjbxx.getFwjms());
        spcyPxDjjbxx.setFwjjbxxid(ysjId);
        spcyPxDjjbxx.setFbz(ySjjbxx.getFbz());

        spcyPxDjjbxx.setSysOrgCode(ySjjbxx.getSysOrgCode()); // 2023-6-26 新增

        // 填写人基本信息
        spcyPxDjjbxx.setFsfdwmc(wjtxjbxx.getFsfdwmc());
        spcyPxDjjbxx.setFsfdwdz(wjtxjbxx.getFsfdwdz());
        spcyPxDjjbxx.setFlxr(wjtxjbxx.getFlxr());
        spcyPxDjjbxx.setFlxdh(wjtxjbxx.getFlxdh());
        spcyWjWjtxjbxxService.save(spcyPxDjjbxx); // 新增填写的问卷
        spcyPxDjjbxx.setSysOrgCode(ySjjbxx.getSysOrgCode());
        spcyWjWjtxjbxxService.updateById(spcyPxDjjbxx);

        String operContent = "新增填写的问卷信息";
        // 将map里面的属性和值转String
        Map<String, Object> beanMap = ObjectToMapUtils.objectToMap(spcyPxDjjbxx);
        operContent += LogUtils.MapToStringMethod(beanMap);
        spcyLogService.addLogs(LogConstant.LOGS_WJ_WJTXJBXX,operContent,spcyPxDjjbxx.getId(), LogConstant.LOGS_WJ_WJTXJBXX, SpcyConstant.LOGS_SYS_TYPE_XZ);

        // 获取原来的问卷题目
        List<SpcyWjWjtm> ySjtmList = spcyWjWjtmService.list(new LambdaQueryWrapper<SpcyWjWjtm>()
                .eq(SpcyWjWjtm::getFwjjbxxid, ysjId)
                .orderByAsc(SpcyWjWjtm::getFxh));

        SpcyWjWjtxtm djtm = null;
        // 原试卷题目不为空
        for (SpcyWjWjtm sjtm : ySjtmList){
            djtm = new SpcyWjWjtxtm(); // 问卷题目
            // 复制原来问卷题目
            String djtmId = GetUuIdUtils.ReplaceUuId(); // 问卷题目id
            BeanUtil.copyProperties(sjtm,djtm);
            djtm.setId(djtmId);
            djtm.setFwjtxjbxxid(djId);
            spcyWjWjtxtmService.save(djtm); // 保存答卷题目

            if (StringUtils.isNotBlank(sjtm.getFsftxxdyj()) && sjtm.getFsftxxdyj().equals("是")){
                SpcyWjWjtxtmxx newTmxx = new SpcyWjWjtxtmxx();
                newTmxx.setId(GetUuIdUtils.ReplaceUuId());
                newTmxx.setFwjtxtmid(djtmId);
                newTmxx.setFxh(1);
                spcyWjWjtxtmxxService.save(newTmxx);
            }

            String ysjtmId = sjtm.getId(); // 原试卷题目id
            // 复制原试卷题目选项
            List<SpcyWjWjtmxx> ySjtmxxList = spcyWjWjtmxxService.list(new LambdaQueryWrapper<SpcyWjWjtmxx>()
                    .eq(SpcyWjWjtmxx::getFwjtmid, ysjtmId)
                    .orderByAsc(SpcyWjWjtmxx::getFxh));

            // 存在原试卷题目选项、新增答卷题目选项
            SpcyWjWjtxtmxx spcyPxDjda = null;
            for (SpcyWjWjtmxx sjtmxx : ySjtmxxList){
                spcyPxDjda = new SpcyWjWjtxtmxx();
                String djdaId = GetUuIdUtils.ReplaceUuId(); // 答卷答案id
                BeanUtil.copyProperties(sjtmxx,spcyPxDjda);
                spcyPxDjda.setId(djdaId);
                spcyPxDjda.setFwjtxtmid(djtmId); // 问卷题目id
                spcyPxDjda.setFxh(sjtmxx.getFxh());
                spcyWjWjtxtmxxService.save(spcyPxDjda); // 保存答卷题目选项
            }

        }

        Map<String,Object> wjtxjbxxVo = queryWjxqxxById(djId); // 获取问卷详情
        return HttpResult.ok(wjtxjbxxVo);
    }


    @Log(title = "查看填写的问卷")
    @ApiOperation(value = "查看填写的问卷")
    @GetMapping(value = "viewWjjbxx")
    public HttpResult<?> viewWjjbxx(@RequestParam("id") String id){
        if (StringUtils.isBlank(id)){
            return HttpResult.error("参数丢失，请联系管理员");
        }
        Map<String,Object> wjtxjbxxVo = queryWjxqxxById(id); // 获取问卷详情

        return HttpResult.ok(wjtxjbxxVo);
    }

    /**
     * 通过id查询问卷详细信息
     */
    public Map<String,Object> queryWjxqxxById(String id){
//        WjtxjbxxVo djjbxxVo = new WjtxjbxxVo();

        SpcyWjWjtxjbxx djjbxx = spcyWjWjtxjbxxService.getById(id);
        if (djjbxx == null){
            log.error("问卷填写id: {}", id);
            throw new BusinessException("问卷不存在！");
        }
//        djjbxxVo.setWjjbxx(djjbxx); // 存放问卷基本信息

        // 单选题
        /*List<SpcyWjWjtxtm> djtmDanxList = spcyWjWjtxtmService.list(new LambdaQueryWrapper<SpcyWjWjtxtm>()
                .eq(SpcyWjWjtxtm::getFwjtxjbxxid, id)
                .orderByAsc(SpcyWjWjtxtm::getFxh));*/

//        List<WjtxtmVo> djtmVoList1 = new ArrayList<>(); // 存放答卷题目和选项
//        List<SpcyWjWjtxtmxx> djdaList1 = new ArrayList<>();

        Map<String,Object> resultMap = new HashMap<>();

        resultMap.put("wjjbxx", djjbxx);

        List<WjtmdbtVo> dbtMapList = new ArrayList<>();
        // 题目
//        if (CollectionUtils.isNotEmpty(djtmDanxList)){

            // 所有大标题
            List<String> dbtList = new ArrayList<>();
            /*List<String> dbtList = djtmDanxList.stream().map(SpcyWjWjtxtm::getFwjtmdbt)
                    .distinct().collect(Collectors.toList());*/
            List<SpcyWjDbt> orgDbtList = spcyWjDbtService.list(new LambdaQueryWrapper<SpcyWjDbt>()
                    .eq(SpcyWjDbt::getFwjjbxxid, djjbxx.getFwjjbxxid())
                    .orderByAsc(SpcyWjDbt::getForder));
            if (CollectionUtil.isNotEmpty(orgDbtList)){
                dbtList = orgDbtList.stream().map(SpcyWjDbt::getFdbt).collect(Collectors.toList());
            }else {
                List<SpcyWjWjtxtm> djtmDanxList = spcyWjWjtxtmService.list(new LambdaQueryWrapper<SpcyWjWjtxtm>()
                        .eq(SpcyWjWjtxtm::getFwjtxjbxxid, id)
                        .orderByAsc(SpcyWjWjtxtm::getFxh));
                dbtList = djtmDanxList.stream().map(SpcyWjWjtxtm::getFwjtmdbt)
                        .distinct().collect(Collectors.toList());
            }

            int i = 1;
            for (String dbt : dbtList){
                WjtmdbtVo wjtmdbtVo = new WjtmdbtVo();
                wjtmdbtVo.setDbt(dbt);

                List<SpcyWjWjtxtm> dbtTmList = spcyWjWjtxtmService.list(new LambdaQueryWrapper<SpcyWjWjtxtm>()
                        .eq(SpcyWjWjtxtm::getFwjtxjbxxid, id)
                        .eq(SpcyWjWjtxtm::getFwjtmdbt,dbt)
                        .orderByAsc(SpcyWjWjtxtm::getFxh));

                List<WjtxtmVo> djtmVoList = new ArrayList<>(); // 存放答卷题目和选项
                List<SpcyWjWjtxtmxx> djdaList = new ArrayList<>();

//                Map<String,Object> resultMap2 = new HashMap<>();
                if (CollectionUtils.isNotEmpty(dbtTmList)) {
                    for (SpcyWjWjtxtm djtm : dbtTmList) {
                        WjtxtmVo djtmVo = new WjtxtmVo();
                        BeanUtil.copyProperties(djtm, djtmVo); // 存放题目
                        // 题目选项
                        djdaList = spcyWjWjtxtmxxService.list(new LambdaQueryWrapper<SpcyWjWjtxtmxx>()
                                .eq(SpcyWjWjtxtmxx::getFwjtxtmid, djtm.getId())
                                .orderByAsc(SpcyWjWjtxtmxx::getFxh));
                        djtmVo.setWjtmxxList(djdaList); // 存放答案选项
                        djtmVoList.add(djtmVo);

                        wjtmdbtVo.setWjtmList(djtmVoList);
                    }
                }
//                resultMap2.put("tmList"+i,wjtmdbtVo);
                i++;
                dbtMapList.add(wjtmdbtVo);
            }
        resultMap.put("dbtList",dbtMapList);
            /*for (SpcyWjWjtxtm djtm : djtmDanxList){
                WjtxtmVo djtmVo = new WjtxtmVo();
                BeanUtil.copyProperties(djtm,djtmVo); // 存放题目
                // 题目选项
                djdaList1 = spcyWjWjtxtmxxService.list(new LambdaQueryWrapper<SpcyWjWjtxtmxx>()
                        .eq(SpcyWjWjtxtmxx::getFwjtxtmid, djtm.getId())
                        .orderByAsc(SpcyWjWjtxtmxx::getFxh));
                djtmVo.setWjtmxxList(djdaList1); // 存放答案选项
                djtmVoList1.add(djtmVo);
            }*/
//        }

//        djjbxxVo.setWjtmList(djtmVoList1);

        return resultMap;
    }

    /**
     * 问卷选项保存
     */
    @AutoLog(value = "问卷选项保存")
    @ApiOperation(value = "问卷选项保存")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(value = "id",name = "选项id",required = true)
    })
    @PostMapping(value = "/selectDjDa")
    public HttpResult<?> selectDjDa(@RequestBody WjxzVo djda){
        SpcyWjWjtxtmxx nowDjda = null;
        if (StringUtils.isNotBlank(djda.getId())) {
            nowDjda = spcyWjWjtxtmxxService.getById(djda.getId());
        }
        String tmid = "";
        if (nowDjda != null){
            tmid = nowDjda.getFwjtxtmid();
        }else {
            tmid = djda.getFwjtxtmid();
        }
        SpcyWjWjtxtm djtm = spcyWjWjtxtmService.getById(tmid);
        if (djtm == null){
            return HttpResult.error("问卷题目不存在，请重试");
        }

        boolean isUpdateTm = false; // 是否更新题目信息
        if (StringUtils.isNotBlank(djtm.getFsftxczkn()) && djtm.getFsftxczkn().equals("是")) {
            djtm.setFczkn(djda.getFczkn());
            isUpdateTm = true;
        }
        if (StringUtils.isNotBlank(djtm.getFsftxyjjy()) && djtm.getFsftxyjjy().equals("是")) {
            djtm.setFyjjy(djda.getFyjjy());
            isUpdateTm = true;
        }
        if (StringUtils.isNotBlank(djtm.getFsftxyxdz()) && djtm.getFsftxyxdz().equals("是")) {
            djtm.setFyxdz(djda.getFyxdz());
            isUpdateTm = true;
        }
        if (StringUtils.isNotBlank(djtm.getFsfkqpf()) && djtm.getFsfkqpf().equals("是")){
            djtm.setFpfjg(djda.getFpfjg());
            isUpdateTm = true;
        }
        if (isUpdateTm) {
            spcyWjWjtxtmService.updateById(djtm); // 修改题目
        }

        String ftmlx = djtm.getFwjtmlx(); // 题目类型
        String fsfczxx = djtm.getFsfczxx(); // 是否存在选项
        String fsftxxdyj = djtm.getFsftxxdyj(); // 是否填写修订意见
        if (nowDjda != null && StringUtils.isNotBlank(fsftxxdyj) && fsftxxdyj.equals("是")){
            nowDjda.setFtkh(djda.getFtkh());
            nowDjda.setFxxdnr(djda.getFxxdnr());
            nowDjda.setFxdly(djda.getFxdly());
            nowDjda.setFxdyj(djda.getFxdyj());
            spcyWjWjtxtmxxService.updateById(nowDjda);
        }

        if (nowDjda != null && StringUtils.isNotBlank(ftmlx) && StringUtils.isNotBlank(fsfczxx) && fsfczxx.equals("是")) {
            // 单选
            if (ftmlx.equals(PxSjConstant.SJTM_LX_DANX)) {
                List<SpcyWjWjtxtmxx> djdaList = spcyWjWjtxtmxxService.list(new LambdaQueryWrapper<SpcyWjWjtxtmxx>()
                        .eq(SpcyWjWjtxtmxx::getFwjtxtmid, tmid));
                if (CollectionUtils.isNotEmpty(djdaList)) {
                    for (SpcyWjWjtxtmxx d : djdaList) {
                        d.setFsfxz(PxSjConstant.SJTM_DJDA_SFXZ_NO); // 重置单选题-所以选中为否
                        spcyWjWjtxtmxxService.updateById(d);
                    }

                    if (nowDjda != null) {
                        if (StringUtils.isNotBlank(nowDjda.getFsfxz()) && nowDjda.getFsfxz().equals("是")){
                            nowDjda.setFsfxz(PxSjConstant.SJTM_DJDA_SFXZ_NO); // 选中 为是
                        }else {
                            nowDjda.setFsfxz(PxSjConstant.SJTM_DJDA_SFXZ_YES); // 选中 为是
                        }
                        djtm.setFxzdz(nowDjda.getFwjtmxx());
                        spcyWjWjtxtmService.updateById(djtm); // 修改题目
                        spcyWjWjtxtmxxService.updateById(nowDjda);
                    }
                }
            }
            else if (ftmlx.equals(PxSjConstant.SJTM_LX_DUOX)) {
                // 多选
                /*if (nowDjda != null) {
                    nowDjda.setFsfxz(djda.getFsfxz());
                    if (djda.getFsfxz() != null && djda.getFsfxz().equals("是")) {
                        djtm.setFxzdz(nowDjda.getFwjtmxx());
                        spcyWjWjtxtmService.updateById(djtm); // 修改题目
                    }
                    spcyWjWjtxtmxxService.updateById(nowDjda);
                }*/
                List<SpcyWjWjtxtmxx> djdaList = spcyWjWjtxtmxxService.list(new LambdaQueryWrapper<SpcyWjWjtxtmxx>()
                        .eq(SpcyWjWjtxtmxx::getFwjtxtmid, tmid));
                if (CollectionUtils.isNotEmpty(djdaList)) {
                    /*for (SpcyWjWjtxtmxx d : djdaList) {
                        d.setFsfxz(PxSjConstant.SJTM_DJDA_SFXZ_NO); // 重置单选题-所以选中为否
                        spcyWjWjtxtmxxService.updateById(d);
                    }*/

                    if (nowDjda != null) {
                        if (StringUtils.isNotBlank(nowDjda.getFsfxz()) && nowDjda.getFsfxz().equals("是")){
                            nowDjda.setFsfxz(PxSjConstant.SJTM_DJDA_SFXZ_NO); // 选中 为否
                        }else {
                            nowDjda.setFsfxz(PxSjConstant.SJTM_DJDA_SFXZ_YES); // 选中 为是
                        }
                        String oldXzdz = "";
                        if (StringUtils.isNotBlank(djtm.getFxzdz())){
                            oldXzdz += "@@" + nowDjda.getFwjtmxx();
                        }else {
                            oldXzdz += nowDjda.getFwjtmxx();
                        }

                        djtm.setFxzdz(oldXzdz);
                        spcyWjWjtxtmService.updateById(djtm); // 修改题目
                        spcyWjWjtxtmxxService.updateById(nowDjda);
                    }
                }
            }else if (ftmlx.equals(PxSjConstant.SJTM_LX_PDT)) {
                // 判断
                List<SpcyWjWjtxtmxx> djdaList = spcyWjWjtxtmxxService.list(new LambdaQueryWrapper<SpcyWjWjtxtmxx>()
                        .eq(SpcyWjWjtxtmxx::getFwjtxtmid, tmid));
                if (CollectionUtils.isNotEmpty(djdaList)) {
                    for (SpcyWjWjtxtmxx d : djdaList) {
                        d.setFsfxz(PxSjConstant.SJTM_DJDA_SFXZ_NO); // 重置单选题-所以选中为否
                        spcyWjWjtxtmxxService.updateById(d);
                    }

                    if (nowDjda != null) {
                        if (StringUtils.isNotBlank(nowDjda.getFsfxz()) && nowDjda.getFsfxz().equals("是")){
                            nowDjda.setFsfxz(PxSjConstant.SJTM_DJDA_SFXZ_NO); // 选中 为否
                        }else {
                            nowDjda.setFsfxz(PxSjConstant.SJTM_DJDA_SFXZ_YES); // 选中 为是
                        }
                        djtm.setFxzdz(nowDjda.getFwjtmxx());
                        spcyWjWjtxtmService.updateById(djtm); // 修改题目
                        spcyWjWjtxtmxxService.updateById(nowDjda);
                    }
                }
            }
        }

        return HttpResult.ok("完成");
    }

    @AutoLog(value = "新增问卷题目选项")
    @ApiOperation(value = "新增问卷题目选项")
    @GetMapping(value = "addWjtxtmxx")
    public HttpResult<?> addWjtxtmxx(@RequestParam("fwjtxtmid") String fwjtxtmid){
        if (StringUtils.isBlank(fwjtxtmid)){
            return HttpResult.error("参数丢失，请联系管理员");
        }
        List<SpcyWjWjtxtmxx> list = spcyWjWjtxtmxxService.list(new LambdaQueryWrapper<SpcyWjWjtxtmxx>()
                .eq(SpcyWjWjtxtmxx::getFwjtxtmid, fwjtxtmid)
                .orderByDesc(SpcyWjWjtxtmxx::getFxh));

        Integer fxh = 1; // 序号
        if (CollectionUtils.isNotEmpty(list)){
            fxh = list.get(0).getFxh(); // 获取最大的
            fxh++;
        }

        SpcyWjWjtxtmxx newTmxx = new SpcyWjWjtxtmxx();
        newTmxx.setId(GetUuIdUtils.ReplaceUuId());
        newTmxx.setFwjtxtmid(fwjtxtmid);
        newTmxx.setFxh(fxh);
        spcyWjWjtxtmxxService.save(newTmxx);

        return HttpResult.ok("新增成功");
    }

    @AutoLog(value = "提交问卷")
    @ApiOperation(value = "提交问卷")
    @PostMapping(value = "submitWj")
    public HttpResult<?> submitWj(@RequestBody WjtjVo wjtjVo){
        if (StringUtils.isBlank(wjtjVo.getId())){
            return HttpResult.error("问卷参数丢失，提交失败");
        }
        SpcyWjWjtxjbxx jbxx = spcyWjWjtxjbxxService.getById(wjtjVo.getId());
        String sysOrgCode = jbxx.getSysOrgCode();
        if (jbxx != null){
            jbxx.setFtjrq(new Date());
        }
        if (CollectionUtils.isNotEmpty(wjtjVo.getWjtxtmxxList())){
            int i = 1;
            SpcyWjWjtxtmxx newTmxx = null;
            for (SpcyWjWjtxtmxx tmxx : wjtjVo.getWjtxtmxxList()){
                if (StringUtils.isBlank(tmxx.getFwjtxtmid())){
                    return HttpResult.error("题目参数丢失，提交失败");
                }
                newTmxx = new SpcyWjWjtxtmxx();
                BeanUtil.copyProperties(tmxx,newTmxx);
                newTmxx.setId(GetUuIdUtils.ReplaceUuId());
                newTmxx.setFwjtxtmid(wjtjVo.getFwjtxtmid());
                newTmxx.setFxh(i);
                spcyWjWjtxtmxxService.save(newTmxx);
            }
        }
        jbxx.setSysOrgCode(sysOrgCode);
        spcyWjWjtxjbxxService.updateById(jbxx);
        return HttpResult.ok("提交成功");
    }

    /**
     * 通过id批量删除
     *
     * @param ids
     * @return
     */
    @Log(title = "填写的问卷基本信息-批量删除")
    @ApiOperation(value = "填写的问卷基本信息-批量删除")
    @DeleteMapping(value = "/deleteBatchWjjbxx")
    public HttpResult<?> deleteBatchWjjbxx(@RequestParam("ids") String ids) {
        if (StringUtils.isEmpty(ids)){
            return HttpResult.error("ids参数不能为空");
        }
        List<String> idsList = Arrays.asList(ids.split(","));
        List<SpcyWjWjtxjbxx> spcyPxDjjbxxList = spcyWjWjtxjbxxService.listByIds(idsList);
        if (CollectionUtils.isEmpty(spcyPxDjjbxxList)){
            return HttpResult.error("数据不存在，请重试");
        }
        String operContent = "";
        for (SpcyWjWjtxjbxx djjbxx : spcyPxDjjbxxList){
            String djId = djjbxx.getId(); // 问卷id

            // 删除答卷题目 和 选项
            LambdaQueryWrapper<SpcyWjWjtxtm> queryWrapper = new LambdaQueryWrapper<>();
            queryWrapper.eq(SpcyWjWjtxtm::getFwjtxjbxxid, djId);
            List<SpcyWjWjtxtm> sjtmList = spcyWjWjtxtmService.list(queryWrapper);

            spcyWjWjtxjbxxService.removeById(djId); // 删除问卷

            operContent = "删除填写的问卷信息：";
            Map<String, Object> oldMap = ObjectToMapUtils.objectToMap(djjbxx);
            operContent += LogUtils.MapToStringMethod(oldMap);
            spcyLogService.addLogs(LogConstant.LOGS_WJ_WJTXJBXX,operContent,djId,LogConstant.LOGS_WJ_WJTXJBXX,SpcyConstant.LOGS_SYS_TYPE_SC);
            operContent = "";

            // 不为空
            if (CollectionUtils.isNotEmpty(sjtmList)){
                for (SpcyWjWjtxtm sjtm : sjtmList){
                    String sjtmId = sjtm.getId();
                    spcyWjWjtxtmService.removeById(sjtm.getId()); // 删除问题题目
                    spcyWjWjtxtmxxService.remove(new LambdaQueryWrapper<SpcyWjWjtxtmxx>()
                            .eq(SpcyWjWjtxtmxx::getFwjtxtmid, sjtmId)); // 删除问卷题目选项
                }
            }
        }

        return HttpResult.ok("删除成功");
    }

}
